package prh25.biblioteca.entity.dao;

import prh25.biblioteca.entity.dao.hibernate.HibernateDAOFactory;



/**
 * 
 *
 * @see http://code.google.com/p/prh-doc/
 * @author Wilson
 */

public abstract class DAOFactory {

	private static final DAOFactory HIBERNATE = new HibernateDAOFactory();

	public static final DAOFactory DEFAULT = HIBERNATE;
	
    /**
     * Factory method for instantiation of concrete factories.
     */
    public static DAOFactory instance(Class factory) {
        try {
            return (DAOFactory)factory.newInstance();
        } catch (Exception ex) {
            throw new RuntimeException("Couldn't create DAOFactory: " + factory);
        }
    }
	
	public abstract AlunoDAO buildAlunoDAO();
	
	public abstract ArquivoDAO buildArquivoDAO();
	
	public abstract CoordenadorDAO buildCoordenadorDAO();
	
	public abstract DocumentoDAO buildDocumentoDAO();
	
	public abstract EnderecoDAO buildEnderecoDAO();
	
	public abstract ProfessorDAO buildProfessorDAO();
	
	public abstract ProjetoPesquisaDAO buildProjetoPesquisaDAO();
	
	public abstract RevisorDAO buildRevisorDAO();
	
	public abstract UsuarioDAO buildUsuarioDAO();
	
	public abstract UsuarioExternoDAO buildUsuarioExternoDAO();
	
}
